package co.edu.usbcali.servicio.rest;

import java.util.Date;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;

/*import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;*/
import org.springframework.stereotype.Controller;

import co.edu.usbcali.modelo.Categorias;
import co.edu.usbcali.modelo.restdto.ArticuloRestDTO;
import co.edu.usbcali.modelo.restdto.CategoriaRestDTO;
import co.edu.usbcali.presentation.businessDelegate.IBusinessDelegatorView;
import co.edu.usbcali.utilities.ApplicationContextHolder;
 

@Path("categoria")
@Controller
@SessionScoped
@ManagedBean
public class CategoriaRest {
	
	/*private static Session session;
	private static ServiceRegistry serviceRegistry;*/
	
	@GET
	@Produces("application/json")
	@Path("/traerCategorias")
	public List<CategoriaRestDTO> traerCategorias(){
		
		List<CategoriaRestDTO> listaCategorias=null;
		try {
			
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);			
			listaCategorias=businessDelegatorView.getDataCategoriasRest();
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}	
			
		return listaCategorias;

	}
	

	/*public String descargarAnexo(Long codAnexo){
		
		String url=null;
		
    	try {  		
    			initSession();
                
    			Anexos anexo = (Anexos) session.get(Anexos.class,
    					Long.valueOf(codAnexo));
    			endSession();
    			
    			url=anexo.getNombre();
    			
    			FileImageOutputStream imageOutput;
    			
    			URL location = getClass().getResource("/");
    	        String newFileName =location.getFile().replaceAll("WEB-INF/classes/", "");
                System.out.println(newFileName+url);
    			imageOutput = new FileImageOutputStream(new File(newFileName+url));
    			imageOutput.write(anexo.getArchivo(), 0, anexo.getArchivo().length);
    		    imageOutput.close();
    			
		} catch (Exception e) {
			url=e.getMessage();
		}
			
		return url;
	}*/
	
	@GET
	@Produces("application/json")
	@Path("/crearCategoria/{nombre}/{usuario}")
	public CategoriaRestDTO crearCategoria(@PathParam("nombre") String nombre, @PathParam("usuario") String usuario){
		
		CategoriaRestDTO categoria=new CategoriaRestDTO();
		
		nombre=nombre.replaceAll("_", " ");
		usuario=usuario.replaceAll("_", " ");
		
    	try {  		
    		IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);			
			Categorias categorian=new Categorias();
			categorian.setNombre(nombre);
			categorian.setUsuCrea(usuario);
			categorian.setUsuModifica(usuario);
			categorian.setEstadoRegistro("A");
			categorian.setFechaCreacion(new Date());
			categorian.setFechaModifcacion(new Date());
			businessDelegatorView.saveCategorias(categorian);    
			
			categoria.setCodigoCate(categorian.getCodigoCate());
			categoria.setEstado(categorian.getEstadoRegistro());
			categoria.setNombre(categorian.getNombre());

		} catch (Exception e) {
			categoria.setError(e.getMessage());
		}
			
		return categoria;

	}
	
	@GET
	@Produces("application/json")
	@Path("/modificarCategoria/{codCate}/{nombre}/{estado}/{usuario}")
	public CategoriaRestDTO modificarCategoria(@PathParam("codCate") Long codCate, @PathParam("nombre") String nombre, @PathParam("estado") String estado, @PathParam("usuario") String usuario){
		
		CategoriaRestDTO categoria=new CategoriaRestDTO();
		nombre=nombre.replaceAll("_", " ");
		usuario=usuario.replaceAll("_", " ");
		
    	try {  		
    		IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);			
			Categorias categorian=businessDelegatorView.getCategorias(codCate);
			categorian.setNombre(nombre);
			categorian.setUsuModifica(usuario);
			categorian.setEstadoRegistro(estado);
			categorian.setFechaModifcacion(new Date());
			
			businessDelegatorView.updateCategorias(categorian);
			
			categoria.setCodigoCate(categorian.getCodigoCate());
			categoria.setEstado(categorian.getEstadoRegistro());
			categoria.setNombre(categorian.getNombre());
			    			
		} catch (Exception e) {
			categoria.setError(e.getMessage());
		}
			
		return categoria;

	}
	
	@GET
	@Produces("application/json")
	@Path("/traerArticulo/{codArticulo}")
	public ArticuloRestDTO traerArticulo(@PathParam("codArticulo") Long codArticulo){
		
		ArticuloRestDTO articulo=null;
		try {
			
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);			
			articulo=businessDelegatorView.getArticuloRest(codArticulo);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}	
			
		return articulo;

	}
	
	@GET
	@Produces("application/json")
	@Path("/traerArticulosFavoritos/{codUsu}")
	public List<ArticuloRestDTO> traerArticulosFavoritos(@PathParam("codUsu") Long codUsu){
		
		List<ArticuloRestDTO> listaCategorias=null;
		try {
			
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);			
			listaCategorias=businessDelegatorView.traerArticulosFavoritos(codUsu);
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}	
			
		return listaCategorias;
	}
	
	@GET
	@Produces("application/json")
	@Path("/traerArticulosCategoria/{codCate}")
	public List<ArticuloRestDTO> traerArticulosCategoria(@PathParam("codCate") Long codCate){
		
		List<ArticuloRestDTO> listaCategorias=null;
		try {
			
			IBusinessDelegatorView businessDelegatorView=ApplicationContextHolder.getContext().getBean(IBusinessDelegatorView.class);			
			listaCategorias=businessDelegatorView.traerArticulosCategoria(codCate);
			
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}	
			
		return listaCategorias;
	}
	
	/*private static void initSession() {
		Configuration configuration = new Configuration().configure();
		serviceRegistry = new StandardServiceRegistryBuilder().applySettings(
				configuration.getProperties()).build();

		SessionFactory sessionFactory = configuration
				.buildSessionFactory(serviceRegistry);

		session = sessionFactory.openSession();
		session.beginTransaction();
	}

	private static void endSession() {
		session.getTransaction().commit();
		session.close();

		StandardServiceRegistryBuilder.destroy(serviceRegistry);
	}*/

}